import { Observable, of } from 'rxjs';
import { _HttpClient } from '@delon/theme';
import { Injectable, Inject } from '@angular/core';
import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
/** 封装了login的一系列接口 */
@Injectable({
    providedIn: 'root'
})
export class LoginService {
    constructor(private http: _HttpClient,
        // 因为只有是 Type 类型的对象，才会被 TypeScript 编译器编译
        @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,
    ) {
    }


    /**
     * 通过账号密码进行检验
     * 参数必须是表单形式否则无法被后台接受
     * @param userName 账号
     * @param password 密码
     * @return Observable
     */
    public login(userName: string, password: string): Observable<any> {
        const that = this;
        return new Observable<any>((ob) => {
            const param = new FormData();
            param.append('username', userName);
            param.append('password', password);
            // 默认配置中对所有HTTP请求都会强制 [校验](https://ng-alain.com/auth/getting-started) 用户 Token
            // 然一般来说登录请求不需要校验，因此可以在请求URL加上：`/login?_allow_anonymous=true` 表示不触发用户 Token 校验 
            that.http
                .post('/login', param, { headers: { enctype: 'multipart/form-data' } })
                .subscribe((res: any) => {
                    if (res.code === 0) {
                        // 设置用户Token信息 默认object 格式 否则验证不通过
                        that.saveToken(res.data);
                    }
                    ob.next(res);
                });
        })
    }

    /**
     * access_token 过期后重新进行请求
     * 这里access_token被强制替换掉
     */
    // public getToken(): Observable<any> {
    //   const that = this;
    //   const user = { 'token': this.storage.get('refreshToken') }
    //   this.tokenService.clear();
    //   this.tokenService.set(user);
    //   return new Observable(ob => {
    //     that.http.post('/weixin/BaseWeixinUser/baseweixinuser/getToken').subscribe(res => {
    //       // 刷新token 数据
    //       if (res.code === 0) {
    //         that.saveToken(res.data);
    //       }

    //       // 如果刷新token过期了 清空token数据 强制用户重新登录
    //       if (res.code === 0) {
    //         that.clearToken();
    //       }
    //       ob.next(res);
    //     });
    //   })
    // }


    /**
     * 保存token信息
     * @param data: {token: '',Rtoken: {}}
     */
    public saveToken(data: any) {
        this.tokenService.set(data);
    }

    /**
     * 清空token 信息 其他数据不清除
     */
    public clearToken() {
        this.tokenService.clear({ onlyToken: true });
    }
}



